Load all required libraries.
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages ---------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.3 v dplyr 1.0.0
## v tidyr 1.1.0 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## Warning: package 'ggplot2' was built under R version 3.6.3
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'readr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(plotly)
## Warning: package 'plotly' was built under R version 3.6.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(broom)
## Warning: package 'broom' was built under R version 3.6.3
Read in raw data from RDS.
raw_data <- readRDS("./n1_n2_cleaned_cases.rds")
Make a few small modifications to names and data for visualizations.
final_data <- raw_data %>% mutate(log_copy_per_L = log10(mean_copy_num_L)) %>%
rename(Facility = wrf) %>%
mutate(Facility = recode(Facility,
"NO" = "WRF A",
"MI" = "WRF B",
"CC" = "WRF C"))
Seperate the data by gene target to ease layering in the final plot
#make three data layers
only_positives <<- subset(final_data, (!is.na(final_data$Facility)))
only_n1 <- subset(only_positives, target == "N1")
only_n2 <- subset(only_positives, target == "N2")
only_background <<-final_data %>%
select(c(date, cases_cum_clarke, new_cases_clarke, X7_day_ave_clarke, cases_per_100000_clarke)) %>%
group_by(date) %>% summarise_if(is.numeric, mean)
#specify fun colors
background_color <- "#7570B3"
seven_day_ave_color <- "#E6AB02"
marker_colors <- c("N1" = '#1B9E77',"N2" ='#D95F02')
#remove facilty C for now
#only_n1 <- only_n1[!(only_n1$Facility == "WRF C"),]
#only_n2 <- only_n2[!(only_n2$Facility == "WRF C"),]
only_n1 <- only_n1[!(only_n1$Facility == "WRF A" & only_n1$date == "2020-11-02"), ]
only_n2 <- only_n2[!(only_n2$Facility == "WRF A" & only_n2$date == "2020-11-02"), ]
Build the main plot
#first layer is the background epidemic curve
p1 <- only_background %>%
plotly::plot_ly() %>%
plotly::add_trace(x = ~date, y = ~new_cases_clarke,
type = "bar",
hoverinfo = "text",
text = ~paste('</br> Date: ', date,
'</br> Daily Cases: ', new_cases_clarke),
alpha = 0.5,
name = "Daily Reported Cases",
color = background_color,
colors = background_color,
showlegend = FALSE) %>%
layout(yaxis = list(title = "Clarke County Daily Cases", showline=TRUE)) %>%
layout(legend = list(orientation = "h", x = 0.2, y = -0.3))
#renders the main plot layer two as seven day moving average
p1 <- p1 %>% plotly::add_trace(x = ~date, y = ~X7_day_ave_clarke,
type = "scatter",
mode = "lines",
hoverinfo = "text",
text = ~paste('</br> Date: ', date,
'</br> Seven-Day Moving Average: ', X7_day_ave_clarke),
name = "Seven Day Moving Average Athens",
line = list(color = seven_day_ave_color),
showlegend = FALSE)
#renders the main plot layer three as positive target hits
p2 <- plotly::plot_ly() %>%
plotly::add_trace(x = ~date, y = ~mean_copy_num_L,
type = "scatter",
mode = "markers",
hoverinfo = "text",
text = ~paste('</br> Date: ', date,
'</br> Facility: ', Facility,
'</br> Target: ', target,
'</br> Copies/L: ', round(mean_copy_num_L, digits = 2)),
data = only_n1,
symbol = ~Facility,
marker = list(color = '#1B9E77', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_trace(x = ~date, y = ~mean_copy_num_L,
type = "scatter",
mode = "markers",
hoverinfo = "text",
text = ~paste('</br> Date: ', date,
'</br> Facility: ', Facility,
'</br> Target: ', target,
'</br> Copies/L: ', round(mean_copy_num_L, digits = 2)),
data = only_n2,
symbol = ~Facility,
marker = list(color = '#D95F02', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
layout(yaxis = list(title = "SARS CoV-2 Copies/L",
showline = TRUE,
type = "log",
dtick = 1,
automargin = TRUE)) %>%
layout(legend = list(orientation = "h", x = 0.2, y = -0.3))
#adds the limit of detection dashed line
p2 <- p2 %>% plotly::add_segments(x = as.Date("2020-03-14"),
xend = ~max(date + 10),
y = 3571.429, yend = 3571.429,
opacity = 0.35,
line = list(color = "black", dash = "dash")) %>%
layout(annotations = list(x = as.Date("2020-03-28"), y = 3.8, xref = "x", yref = "y",
text = "Limit of Detection", showarrow = FALSE))
p1
## Warning: `arrange_()` is deprecated as of dplyr 0.7.0.
## Please use `arrange()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Warning: Ignoring 1 observations
p2
## Warning: `group_by_()` is deprecated as of dplyr 0.7.0.
## Please use `group_by()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
Combine the two main plot pieces as a subplot
p_combined <-
plotly::subplot(p2,p1, # plots to combine, top to bottom
nrows = 2,
heights = c(.6,.4), # relative heights of the two plots
shareX = TRUE, # plots will share an X axis
titleY = TRUE
) %>%
# create a vertical "spike line" to compare data across 2 plots
plotly::layout(
xaxis = list(
spikethickness = 1,
spikedash = "dot",
spikecolor = "black",
spikemode = "across+marker",
spikesnap = "cursor"
),
yaxis = list(spikethickness = 0)
)
## Warning: Ignoring 1 observations
p_combined
Save the plot to pull into the index
#save(p_combined, file = "./plotly_fig.rda")
Save an htmlwidget for website embedding
#htmlwidgets::saveWidget(p_combined, "plotly_fig.html")
#seperate n1 and n2 frames by site
#n1
wrf_a_only_n1 <- subset(only_n1, Facility == "WRF A")
wrf_b_only_n1 <- subset(only_n1, Facility == "WRF B")
wrf_c_only_n1 <- subset(only_n1, Facility == "WRF C")
#n2
wrf_a_only_n2 <- subset(only_n2, Facility == "WRF A")
wrf_b_only_n2 <- subset(only_n2, Facility == "WRF B")
wrf_c_only_n2 <- subset(only_n2, Facility == "WRF C")
#build a function here to make smooth frames so we don't repeat everything in huge loops
#FOR INDIVIDUAL FIGURES ONLY
make_n1_smooth_frame <- function(df){
smooth_n1 <- df %>% select(-c(Facility)) %>%
group_by(date, cases_cum_clarke, new_cases_clarke, X7_day_ave_clarke, cases_per_100000_clarke) %>%
summarize(sum_copy_num_L = sum(mean_total_copies)) %>%
ungroup() %>%
mutate(log_sum_copies_L = log10(sum_copy_num_L)) %>%
mutate(target = "N1")
return(smooth_n1)
}
make_n2_smooth_frame <- function(df){
smooth_n1 <- df %>% select(-c(Facility)) %>%
group_by(date, cases_cum_clarke, new_cases_clarke, X7_day_ave_clarke, cases_per_100000_clarke) %>%
summarize(sum_copy_num_L = sum(mean_total_copies)) %>%
ungroup() %>%
mutate(log_sum_copies_L = log10(sum_copy_num_L)) %>%
mutate(target = "N2")
return(smooth_n1)
}
#run frames through the functions
wrfa_smooth_n1 <- make_n1_smooth_frame(wrf_a_only_n1)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
wrfb_smooth_n1 <- make_n1_smooth_frame(wrf_b_only_n1)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
wrfc_smooth_n1 <- make_n1_smooth_frame(wrf_c_only_n1)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
wrfa_smooth_n2 <- make_n2_smooth_frame(wrf_a_only_n2)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
wrfb_smooth_n2 <- make_n2_smooth_frame(wrf_b_only_n2)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
wrfc_smooth_n2 <- make_n2_smooth_frame(wrf_c_only_n2)
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
#get max date
maxdate <- max(wrfa_smooth_n1$date)
mindate <- min(wrfa_smooth_n1$date)
Build loess smoothing figures figures
#COMBINED FIGURE ONLY
#create smoothing data frames
#n1
smooth_n1 <- only_n1 %>% select(-c(Facility)) %>%
group_by(date, cases_cum_clarke, new_cases_clarke, X7_day_ave_clarke, cases_per_100000_clarke) %>%
summarize(sum_copy_num_L = sum(mean_total_copies)) %>%
ungroup() %>%
mutate(log_sum_copies_L = log10(sum_copy_num_L)) %>%
mutate(target = "N1")
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
#n2
smooth_n2 <- only_n2 %>% select(-c(Facility)) %>%
group_by(date, cases_cum_clarke, new_cases_clarke, X7_day_ave_clarke, cases_per_100000_clarke) %>%
summarize(sum_copy_num_L = sum(mean_total_copies)) %>%
ungroup() %>%
mutate(log_sum_copies_L = log10(sum_copy_num_L)) %>%
mutate(target = "N2")
## `summarise()` regrouping output by 'date', 'cases_cum_clarke', 'new_cases_clarke', 'X7_day_ave_clarke' (override with `.groups` argument)
#**************************************COMBINED PLOT**********************************************
#add trendlines
#extract data from geom_smooth
#n1 extract
# *********************************span 0.6***********************************
#*****************Must always update the n = TOTAL NUMBER OF DAYS*************************
extract_n1 <- ggplot(smooth_n1, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n1<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#n2 extract
extract_n2 <- ggplot(smooth_n2, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n2<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#look at the fits to align dates and total observations
#n1
extract_n1
## `geom_smooth()` using formula 'y ~ x'
fit_n1
## [1] 11.70734 11.77143 11.83536 11.89845 11.96000 12.01935 12.07582 12.12872
## [9] 12.17874 12.22704 12.27370 12.31880 12.36241 12.40459 12.44544 12.48501
## [17] 12.52338 12.56063 12.59683 12.63205 12.66636 12.69985 12.73152 12.76046
## [25] 12.78687 12.81095 12.83288 12.85287 12.87111 12.88780 12.90312 12.91728
## [33] 12.93046 12.94286 12.95469 12.96612 12.97736 12.98861 13.00005 13.01188
## [41] 13.02429 13.03749 13.05166 13.06257 13.06659 13.06488 13.05858 13.04883
## [49] 13.03677 13.02354 13.01030 12.99817 12.98831 12.98185 12.97995 12.98373
## [57] 12.99435 13.01395 13.04290 13.07968 13.12276 13.17062 13.22173 13.27457
## [65] 13.32761 13.37933 13.42820 13.47270 13.51130 13.54249 13.56472 13.58341
## [73] 13.60467 13.62810 13.65326 13.67974 13.70712 13.73497 13.76288 13.79042
## [81] 13.81717 13.84271 13.86662 13.88847 13.90785 13.92434 13.93751 13.94695
## [89] 13.95222 13.95292 13.94862 13.93889 13.91970 13.88856 13.84734 13.79795
## [97] 13.74226 13.68217 13.61957 13.55635 13.49439 13.43560 13.38184 13.33503
## [105] 13.29703 13.26975 13.24713 13.22222 13.19557 13.16774 13.13930 13.11079
## [113] 13.08278 13.05582 13.03047 13.00729 12.98683 12.96966 12.95632 12.94738
## [121] 12.94242 12.94048 12.94138 12.94490 12.95083 12.95898 12.96913 12.98108
## [129] 12.99461 13.00953 13.02563 13.04271 13.06054 13.07894 13.09769 13.11658
## [137] 13.13542 13.15399 13.17208 13.18950 13.20737 13.22677 13.24740 13.26897
## [145] 13.29117 13.31371 13.33628 13.35930 13.38328 13.40813 13.43373 13.45998
## [153] 13.48677 13.51401 13.54170 13.56993 13.59876 13.62820 13.65831 13.68913
## [161] 13.72068 13.75302 13.78618
#n2
extract_n2
## `geom_smooth()` using formula 'y ~ x'
fit_n2
## [1] 11.51685 11.61753 11.71728 11.81532 11.91088 12.00320 12.09151 12.17504
## [9] 12.25454 12.33131 12.40545 12.47705 12.54618 12.61293 12.67739 12.73965
## [17] 12.79978 12.85788 12.91403 12.96832 13.02083 13.07165 13.11968 13.16392
## [25] 13.20459 13.24191 13.27608 13.30733 13.33587 13.36192 13.38570 13.40741
## [33] 13.42728 13.44553 13.46236 13.47800 13.49266 13.50656 13.51991 13.53292
## [41] 13.54583 13.55884 13.57216 13.58029 13.57859 13.56856 13.55173 13.52961
## [49] 13.50372 13.47557 13.44668 13.41857 13.39275 13.37074 13.35405 13.34421
## [57] 13.34272 13.34854 13.35908 13.37363 13.39143 13.41175 13.43386 13.45701
## [65] 13.48046 13.50348 13.52533 13.54526 13.56255 13.57645 13.58623 13.59544
## [73] 13.60785 13.62306 13.64066 13.66026 13.68145 13.70382 13.72697 13.75050
## [81] 13.77399 13.79706 13.81928 13.84026 13.85960 13.87689 13.89173 13.90370
## [89] 13.91241 13.91746 13.91844 13.91494 13.90653 13.89343 13.87623 13.85550
## [97] 13.83183 13.80580 13.77799 13.74899 13.71937 13.68971 13.66061 13.63263
## [105] 13.60636 13.58239 13.55885 13.53366 13.50708 13.47938 13.45080 13.42162
## [113] 13.39208 13.36244 13.33297 13.30392 13.27555 13.24811 13.22188 13.19709
## [121] 13.17146 13.14279 13.11156 13.07823 13.04327 13.00715 12.97034 12.93329
## [129] 12.89648 12.86038 12.82544 12.79214 12.76095 12.73233 12.70674 12.68466
## [137] 12.66655 12.65287 12.64410 12.64070 12.63994 12.63930 12.63954 12.64143
## [145] 12.64574 12.65323 12.66468 12.67897 12.69471 12.71221 12.73181 12.75383
## [153] 12.77859 12.80642 12.83743 12.87142 12.90828 12.94787 12.99009 13.03481
## [161] 13.08190 13.13124 13.18270
#assign fits to a vector
n1_trend <- fit_n1
n2_trend <- fit_n2
#extract y min and max for each
limits_n1 <- ggplot_build(extract_n1)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n1 <- as.data.frame(limits_n1)
n1_ymin <- limits_n1$ymin
n1_ymax <- limits_n1$ymax
limits_n2 <- ggplot_build(extract_n2)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n2 <- as.data.frame(limits_n2)
n2_ymin <- limits_n2$ymin
n2_ymax <- limits_n2$ymax
#reassign dataframes (just to be safe)
work_n1 <- smooth_n1
work_n2 <- smooth_n2
#fill in missing dates to smooth fits
work_n1 <- work_n1 %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n1 <- work_n1$date
work_n2 <- work_n2 %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n2 <- work_n2$date
#create a new smooth dataframe to layer
smooth_frame_n1 <- data.frame(date_vec_n1, n1_trend, n1_ymin, n1_ymax)
smooth_frame_n2 <- data.frame(date_vec_n2, n2_trend, n2_ymin, n2_ymax)
#make plotlys
#**************************************COMBINED PLOT**********************************************
#plot smooth frames
p3 <- plotly::plot_ly() %>%
plotly::add_lines(x = ~date_vec_n1, y = ~n1_trend,
data = smooth_frame_n1,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1,
'</br> Median Log Copies: ', round(n1_trend, digits = 2),
'</br> Target: N1'),
line = list(color = '#1B9E77', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_lines(x = ~date_vec_n2, y = ~n2_trend,
data = smooth_frame_n2,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2,
'</br> Median Log Copies: ', round(n2_trend, digits = 2),
'</br> Target: N2'),
line = list(color = '#D95F02', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_ribbons(x ~date_vec_n1, ymin = ~n1_ymin, ymax = ~n1_ymax,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1, #leaving in case we want to change
'</br> Max Log Copies: ', round(n1_ymax, digits = 2),
'</br> Min Log Copies: ', round(n1_ymin, digits = 2),
'</br> Target: N1'),
name = "",
line = list(color = '#1B9E77')) %>%
plotly::add_ribbons(x ~date_vec_n2, ymin = ~n2_ymin, ymax = ~n2_ymax,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2, #leaving in case we want to change
'</br> Max Log Copies: ', round(n2_ymax, digits = 2),
'</br> Min Log Copies: ', round(n2_ymin, digits = 2),
'</br> Target: N2'),
name = "",
line = list(color = '#D95F02')) %>%
layout(yaxis = list(title = "Total Log SARS CoV-2 Copies",
showline = TRUE,
automargin = TRUE)) %>%
layout(xaxis = list(title = "Date")) %>%
plotly::add_segments(x = as.Date("2020-06-24"),
xend = as.Date("2020-06-24"),
y = ~min(n1_ymin), yend = ~max(n1_ymax),
opacity = 0.35,
name = "Bars Repoen",
hoverinfo = "text",
text = "</br> Bars Reopen",
"</br> 2020-06-24",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-07-09"),
xend = as.Date("2020-07-09"),
y = ~min(n1_ymin), yend = ~max(n1_ymax),
opacity = 0.35,
name = "Mask Mandate",
hoverinfo = "text",
text = "</br> Mask Mandate",
"</br> 2020-07-09",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-08-20"),
xend = as.Date("2020-08-20"),
y = ~min(n1_ymin), yend = ~max(n1_ymax),
opacity = 0.35,
name = "</br> Classes Begin",
"</br> 2020-08-20",
hoverinfo = "text",
text = "Classes Begin",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = smooth_n1,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#1B9E77', size = 6, opacity = 0.65)) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = smooth_n2,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#D95F02', size = 6, opacity = 0.65))
p3
Create final trend plot by stacking with epidemic curve
smooth_extracttest <-
plotly::subplot(p3,p1, # plots to combine, top to bottom
nrows = 2,
heights = c(.6,.4), # relative heights of the two plots
shareX = TRUE, # plots will share an X axis
titleY = TRUE
) %>%
# create a vertical "spike line" to compare data across 2 plots
plotly::layout(
xaxis = list(
spikethickness = 1,
spikedash = "dot",
spikecolor = "black",
spikemode = "across+marker",
spikesnap = "cursor"
),
yaxis = list(spikethickness = 0)
)
## Warning: Ignoring 1 observations
smooth_extracttest
#save(smooth_extracttest, file = "./smooth_extracttest.rda")
This makes the individual plots
#**************************************WRF A PLOT**********************************************
#add trendlines
#extract data from geom_smooth
#n1 extract
# *********************************span 0.6***********************************
#*****************Must always update the n = TOTAL NUMBER OF DAYS*************************
extract_n1a <- ggplot(wrfa_smooth_n1, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n1a<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#n2 extract
extract_n2a <- ggplot(wrfa_smooth_n2, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n2a<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#look at the fits to align dates and total observations
#n1
extract_n1a
## `geom_smooth()` using formula 'y ~ x'
fit_n1a
## [1] 11.55381 11.56227 11.57160 11.58145 11.59145 11.60125 11.61048 11.61879
## [9] 11.62655 11.63442 11.64244 11.65063 11.65903 11.66768 11.67661 11.68585
## [17] 11.69543 11.70539 11.71576 11.72658 11.73787 11.74968 11.76139 11.77244
## [25] 11.78296 11.79307 11.80289 11.81253 11.82213 11.83181 11.84168 11.85186
## [33] 11.86248 11.87367 11.88553 11.89820 11.91179 11.92643 11.94223 11.95932
## [41] 11.97783 11.99786 12.01955 12.04266 12.06686 12.09208 12.11829 12.14543
## [49] 12.17345 12.20231 12.23194 12.26230 12.29334 12.32501 12.35725 12.39003
## [57] 12.42328 12.46514 12.52201 12.59121 12.67009 12.75597 12.84619 12.93808
## [65] 13.02899 13.11623 13.19716 13.26909 13.32937 13.37534 13.40431 13.42166
## [73] 13.43472 13.44374 13.44901 13.45080 13.44938 13.44503 13.43801 13.42861
## [81] 13.41710 13.40374 13.38882 13.37261 13.35537 13.33739 13.31894 13.30028
## [89] 13.28170 13.26347 13.24586 13.22914 13.20451 13.16462 13.11189 13.04875
## [97] 12.97765 12.90100 12.82125 12.74083 12.66217 12.58771 12.51987 12.46109
## [105] 12.41380 12.38044 12.35588 12.33336 12.31288 12.29443 12.27802 12.26364
## [113] 12.25129 12.24097 12.23267 12.22640 12.22214 12.21991 12.21968 12.22147
## [121] 12.22550 12.23188 12.24048 12.25115 12.26376 12.27815 12.29418 12.31171
## [129] 12.33059 12.35068 12.37184 12.39392 12.41677 12.44027 12.46425 12.48857
## [137] 12.51310 12.53769 12.56219 12.58647 12.61036 12.63375 12.65740 12.68212
## [145] 12.70782 12.73438 12.76170 12.78967 12.81818 12.84713 12.87641 12.90591
## [153] 12.93553 12.96516 12.99490 13.02494 13.05535 13.08619 13.11753 13.14942
## [161] 13.18193 13.21511 13.24903
#n2
extract_n2a
## `geom_smooth()` using formula 'y ~ x'
fit_n2a
## [1] 11.32539 11.42441 11.52249 11.61887 11.71280 11.80352 11.89026 11.97227
## [9] 12.05029 12.12561 12.19832 12.26851 12.33626 12.40166 12.46479 12.52573
## [17] 12.58457 12.64140 12.69629 12.74934 12.80063 12.85024 12.89708 12.94014
## [25] 12.97963 13.01577 13.04879 13.07888 13.10628 13.13119 13.15383 13.17443
## [33] 13.19319 13.21034 13.22608 13.24064 13.25423 13.26707 13.27937 13.29136
## [41] 13.30324 13.31524 13.32757 13.33526 13.33410 13.32543 13.31059 13.29092
## [49] 13.26777 13.24247 13.21637 13.19081 13.16714 13.14669 13.13080 13.12082
## [57] 13.11809 13.12422 13.13892 13.16067 13.18797 13.21930 13.25315 13.28802
## [65] 13.32239 13.35475 13.38359 13.40739 13.42466 13.43387 13.43352 13.42680
## [73] 13.41801 13.40731 13.39485 13.38079 13.36527 13.34845 13.33048 13.31151
## [81] 13.29170 13.27119 13.25015 13.22871 13.20704 13.18529 13.16361 13.14215
## [89] 13.12107 13.10051 13.08064 13.06159 13.03776 13.00444 12.96314 12.91537
## [97] 12.86265 12.80651 12.74844 12.68998 12.63262 12.57790 12.52732 12.48240
## [105] 12.44466 12.41561 12.39343 12.37506 12.36013 12.34828 12.33916 12.33238
## [113] 12.32761 12.32447 12.32259 12.32163 12.32122 12.32098 12.32058 12.31963
## [121] 12.31962 12.32202 12.32647 12.33261 12.34008 12.34852 12.35758 12.36688
## [129] 12.37606 12.38478 12.39266 12.39935 12.40448 12.40770 12.40865 12.40696
## [137] 12.40227 12.39422 12.38246 12.36661 12.34633 12.32125 12.29316 12.26398
## [145] 12.23356 12.20176 12.16842 12.13339 12.09653 12.05769 12.01672 11.97346
## [153] 11.92777 11.87950 11.82867 11.77548 11.72002 11.66239 11.60271 11.54107
## [161] 11.47758 11.41233 11.34543
#assign fits to a vector
n1_trenda <- fit_n1a
n2_trenda <- fit_n2a
#extract y min and max for each
limits_n1a <- ggplot_build(extract_n1a)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n1a <- as.data.frame(limits_n1a)
n1_ymina <- limits_n1a$ymin
n1_ymaxa <- limits_n1a$ymax
limits_n2a <- ggplot_build(extract_n2a)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n2a <- as.data.frame(limits_n2a)
n2_ymina <- limits_n2a$ymin
n2_ymaxa <- limits_n2a$ymax
#reassign dataframes (just to be safe)
work_n1a <- wrfa_smooth_n1
work_n2a<- wrfa_smooth_n1
#fill in missing dates to smooth fits
work_n1a <- work_n1a %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n1a <- work_n1a$date
work_n2a <- work_n2a %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n2a <- work_n2a$date
#create a new smooth dataframe to layer
smooth_frame_n1a <- data.frame(date_vec_n1a, n1_trenda, n1_ymina, n1_ymaxa)
smooth_frame_n2a <- data.frame(date_vec_n2a, n2_trenda, n2_ymina, n2_ymaxa)
#WRF A
#plot smooth frames
p_wrf_a <- plotly::plot_ly() %>%
plotly::add_lines(x = ~date_vec_n1a, y = ~n1_trenda,
data = smooth_frame_n1a,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1a,
'</br> Median Log Copies: ', round(n1_trenda, digits = 2),
'</br> Target: N1'),
line = list(color = '#1B9E77', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
layout(xaxis = list(range = c(mindate - 7, maxdate + 7))) %>% #buffer here
plotly::add_lines(x = ~date_vec_n2a, y = ~n2_trenda,
data = smooth_frame_n2a,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2a,
'</br> Median Log Copies: ', round(n2_trenda, digits = 2),
'</br> Target: N2'),
line = list(color = '#D95F02', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_ribbons(x ~date_vec_n1a, ymin = ~n1_ymina, ymax = ~n1_ymaxa,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1a, #leaving in case we want to change
'</br> Max Log Copies: ', round(n1_ymaxa, digits = 2),
'</br> Min Log Copies: ', round(n1_ymina, digits = 2),
'</br> Target: N1'),
name = "",
line = list(color = '#1B9E77')) %>%
plotly::add_ribbons(x ~date_vec_n2a, ymin = ~n2_ymina, ymax = ~n2_ymaxa,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2a, #leaving in case we want to change
'</br> Max Log Copies: ', round(n2_ymaxa, digits = 2),
'</br> Min Log Copies: ', round(n2_ymina, digits = 2),
'</br> Target: N2'),
name = "",
line = list(color = '#D95F02')) %>%
layout(yaxis = list(title = "Total Log SARS CoV-2 Copies",
showline = TRUE,
automargin = TRUE)) %>%
layout(xaxis = list(title = "Date")) %>%
layout(title = "WRF A") %>%
plotly::add_segments(x = as.Date("2020-06-24"),
xend = as.Date("2020-06-24"),
y = ~min(n1_ymina), yend = ~max(n1_ymaxa),
opacity = 0.35,
name = "Bars Repoen",
hoverinfo = "text",
text = "</br> Bars Reopen",
"</br> 2020-06-24",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-07-09"),
xend = as.Date("2020-07-09"),
y = ~min(n1_ymina), yend = ~max(n1_ymaxa),
opacity = 0.35,
name = "Mask Mandate",
hoverinfo = "text",
text = "</br> Mask Mandate",
"</br> 2020-07-09",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-08-20"),
xend = as.Date("2020-08-20"),
y = ~min(n1_ymina), yend = ~max(n1_ymaxa),
opacity = 0.35,
name = "</br> Classes Begin",
"</br> 2020-08-20",
hoverinfo = "text",
text = "Classes Begin",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-10-03"),
xend = as.Date("2020-10-03"),
y = ~min(n1_ymina), yend = ~max(n1_ymaxa),
opacity = 0.35,
name = "</br> First Home Football Game",
"</br> 2020-10-03",
hoverinfo = "text",
text = "First Home Football Game",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfa_smooth_n1,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#1B9E77', size = 6, opacity = 0.65)) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfa_smooth_n2,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#D95F02', size = 6, opacity = 0.65))
p_wrf_a
save(p_wrf_a, file = "./plotly_objs/p_wrf_a.rda")
#**************************************WRF B PLOT**********************************************
#add trendlines
#extract data from geom_smooth
#n1 extract
# *********************************span 0.6***********************************
#*****************Must always update the n = TOTAL NUMBER OF DAYS*************************
extract_n1b <- ggplot(wrfb_smooth_n1, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n1b<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#n2 extract
extract_n2b <- ggplot(wrfb_smooth_n2, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n2b<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 163)
## Warning: Ignoring unknown aesthetics: outfit
#look at the fits to align dates and total observations
#n1
extract_n1b
## `geom_smooth()` using formula 'y ~ x'
fit_n1b
## [1] 11.36419 11.39724 11.43078 11.46410 11.49650 11.52728 11.55574 11.58117
## [9] 11.60426 11.62625 11.64721 11.66721 11.68632 11.70462 11.72219 11.73910
## [17] 11.75542 11.77123 11.78661 11.80163 11.81636 11.83087 11.84415 11.85523
## [25] 11.86433 11.87166 11.87740 11.88178 11.88500 11.88725 11.88876 11.88971
## [33] 11.89032 11.89079 11.89132 11.89213 11.89341 11.89537 11.89822 11.90216
## [41] 11.90740 11.91414 11.92258 11.92861 11.92870 11.92394 11.91542 11.90425
## [49] 11.89151 11.87829 11.86568 11.85479 11.84669 11.84249 11.84328 11.85015
## [57] 11.86420 11.88794 11.92212 11.96511 12.01530 12.07109 12.13085 12.19297
## [65] 12.25584 12.31784 12.37736 12.43279 12.48251 12.52492 12.55838 12.59020
## [73] 12.62818 12.67149 12.71931 12.77084 12.82523 12.88168 12.93936 12.99745
## [81] 13.05512 13.11157 13.16596 13.21747 13.26529 13.30859 13.34655 13.37835
## [89] 13.40317 13.42019 13.42858 13.42753 13.41232 13.38050 13.33466 13.27738
## [97] 13.21124 13.13883 13.06272 12.98550 12.90975 12.83806 12.77300 12.71716
## [105] 12.67311 12.64345 12.61990 12.59291 12.56318 12.53138 12.49820 12.46432
## [113] 12.43042 12.39719 12.36532 12.33548 12.30835 12.28463 12.26500 12.25014
## [121] 12.23892 12.22973 12.22251 12.21719 12.21372 12.21204 12.21209 12.21382
## [129] 12.21715 12.22204 12.22843 12.23625 12.24544 12.25595 12.26773 12.28069
## [137] 12.29480 12.30999 12.32621 12.34338 12.36236 12.38380 12.40731 12.43252
## [145] 12.45905 12.48655 12.51462 12.54388 12.57505 12.60791 12.64224 12.67781
## [153] 12.71439 12.75178 12.78998 12.82924 12.86961 12.91117 12.95400 12.99815
## [161] 13.04371 13.09075 13.13933
#n2
extract_n2b
## `geom_smooth()` using formula 'y ~ x'
fit_n2b
## [1] 11.05047 11.11627 11.18195 11.24676 11.30996 11.37079 11.42851 11.48237
## [9] 11.53311 11.58199 11.62911 11.67453 11.71833 11.76059 11.80140 11.84081
## [17] 11.87892 11.91581 11.95154 11.98619 12.01986 12.05260 12.08339 12.11128
## [25] 12.13650 12.15924 12.17972 12.19816 12.21476 12.22974 12.24332 12.25570
## [33] 12.26710 12.27772 12.28779 12.29751 12.30710 12.31677 12.32673 12.33719
## [41] 12.34837 12.36048 12.37374 12.38349 12.38577 12.38181 12.37286 12.36015
## [49] 12.34491 12.32838 12.31180 12.29639 12.28341 12.27407 12.26961 12.27128
## [57] 12.28031 12.29721 12.32094 12.35041 12.38451 12.42214 12.46222 12.50362
## [65] 12.54527 12.58605 12.62486 12.66062 12.69221 12.71854 12.73851 12.75885
## [73] 12.78644 12.82033 12.85960 12.90334 12.95060 13.00048 13.05203 13.10435
## [81] 13.15649 13.20754 13.25657 13.30265 13.34486 13.38228 13.41397 13.43902
## [89] 13.45649 13.46547 13.46502 13.45422 13.42890 13.38717 13.33153 13.26447
## [97] 13.18847 13.10603 13.01965 12.93181 12.84501 12.76173 12.68448 12.61574
## [105] 12.55801 12.51378 12.47403 12.42877 12.37903 12.32582 12.27016 12.21307
## [113] 12.15558 12.09870 12.04345 11.99085 11.94193 11.89769 11.85917 11.82739
## [121] 11.79992 11.77378 11.74911 11.72605 11.70474 11.68532 11.66793 11.65271
## [129] 11.63980 11.62935 11.62149 11.61637 11.61412 11.61490 11.61882 11.62605
## [137] 11.63672 11.65097 11.66894 11.69077 11.71609 11.74438 11.77550 11.80934
## [145] 11.84579 11.88472 11.92601 11.96971 12.01599 12.06487 12.11640 12.17062
## [153] 12.22757 12.28728 12.34982 12.41521 12.48343 12.55447 12.62834 12.70501
## [161] 12.78449 12.86676 12.95181
#assign fits to a vector
n1_trendb <- fit_n1b
n2_trendb <- fit_n2b
#extract y min and max for each
limits_n1b <- ggplot_build(extract_n1b)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n1b <- as.data.frame(limits_n1b)
n1_yminb <- limits_n1b$ymin
n1_ymaxb <- limits_n1b$ymax
limits_n2b <- ggplot_build(extract_n2b)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n2b <- as.data.frame(limits_n2b)
n2_yminb <- limits_n2b$ymin
n2_ymaxb <- limits_n2b$ymax
#reassign dataframes (just to be safe)
work_n1b <- wrfb_smooth_n1
work_n2b<- wrfb_smooth_n1
#fill in missing dates to smooth fits
work_n1b <- work_n1b %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n1b <- work_n1b$date
work_n2b <- work_n2b %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n2b <- work_n2b$date
#create a new smooth dataframe to layer
smooth_frame_n1b <- data.frame(date_vec_n1b, n1_trendb, n1_yminb, n1_ymaxb)
smooth_frame_n2b <- data.frame(date_vec_n2b, n2_trendb, n2_yminb, n2_ymaxb)
#WRF B
#plot smooth frames
p_wrf_b <- plotly::plot_ly() %>%
plotly::add_lines(x = ~date_vec_n1b, y = ~n1_trendb,
data = smooth_frame_n1b,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1b,
'</br> Median Log Copies: ', round(n1_trendb, digits = 2),
'</br> Target: N1'),
line = list(color = '#1B9E77', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
layout(xaxis = list(range = c(mindate - 7, maxdate + 7))) %>% #buffer here
plotly::add_lines(x = ~date_vec_n2b, y = ~n2_trendb,
data = smooth_frame_n2b,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2b,
'</br> Median Log Copies: ', round(n2_trendb, digits = 2),
'</br> Target: N2'),
line = list(color = '#D95F02', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_ribbons(x ~date_vec_n1b, ymin = ~n1_yminb, ymax = ~n1_ymaxb,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1b, #leaving in case we want to change
'</br> Max Log Copies: ', round(n1_ymaxb, digits = 2),
'</br> Min Log Copies: ', round(n1_yminb, digits = 2),
'</br> Target: N1'),
name = "",
line = list(color = '#1B9E77')) %>%
plotly::add_ribbons(x ~date_vec_n2b, ymin = ~n2_yminb, ymax = ~n2_ymaxb,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2b, #leaving in case we want to change
'</br> Max Log Copies: ', round(n2_ymaxb, digits = 2),
'</br> Min Log Copies: ', round(n2_yminb, digits = 2),
'</br> Target: N2'),
name = "",
line = list(color = '#D95F02')) %>%
layout(yaxis = list(title = "Total Log SARS CoV-2 Copies",
showline = TRUE,
automargin = TRUE)) %>%
layout(xaxis = list(title = "Date")) %>%
layout(title = "WRF B") %>%
plotly::add_segments(x = as.Date("2020-06-24"),
xend = as.Date("2020-06-24"),
y = ~min(n1_yminb), yend = ~max(n1_ymaxb),
opacity = 0.35,
name = "Bars Repoen",
hoverinfo = "text",
text = "</br> Bars Reopen",
"</br> 2020-06-24",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-07-09"),
xend = as.Date("2020-07-09"),
y = ~min(n1_yminb), yend = ~max(n1_ymaxb),
opacity = 0.35,
name = "Mask Mandate",
hoverinfo = "text",
text = "</br> Mask Mandate",
"</br> 2020-07-09",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-08-20"),
xend = as.Date("2020-08-20"),
y = ~min(n1_yminb), yend = ~max(n1_ymaxb),
opacity = 0.35,
name = "</br> Classes Begin",
"</br> 2020-08-20",
hoverinfo = "text",
text = "Classes Begin",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-10-03"),
xend = as.Date("2020-10-03"),
y = ~min(n1_yminb), yend = ~max(n1_ymaxb),
opacity = 0.35,
name = "</br> First Home Football Game",
"</br> 2020-10-03",
hoverinfo = "text",
text = "First Home Football Game",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfb_smooth_n1,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#1B9E77', size = 6, opacity = 0.65)) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfb_smooth_n2,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#D95F02', size = 6, opacity = 0.65))
p_wrf_b
save(p_wrf_b, file = "./plotly_objs/p_wrf_b.rda")
#**************************************WRF C PLOT********************************************** Does not work until raw data fixed #add trendlines #extract data from geom_smooth #n1 extract # *********************************span 0.6*********************************** #*****************Must always update the n = TOTAL NUMBER OF DAYS*************************
extract_n1c <- ggplot(wrfc_smooth_n1, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n1c<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 149)
## Warning: Ignoring unknown aesthetics: outfit
#n2 extract
extract_n2c <- ggplot(wrfc_smooth_n2, aes(x = date, y = log_sum_copies_L)) +
stat_smooth(aes(outfit=fit_n2c<<-..y..), method = "loess", color = '#1B9E77',
span = 0.6, n = 149)
## Warning: Ignoring unknown aesthetics: outfit
#look at the fits to align dates and total observations
#n1
extract_n1c
## `geom_smooth()` using formula 'y ~ x'
fit_n1c
## [1] 11.20243 11.25271 11.30203 11.35028 11.39733 11.44306 11.48735 11.53008
## [9] 11.57140 11.61153 11.65049 11.68827 11.72489 11.76034 11.79464 11.82779
## [17] 11.85980 11.89067 11.92040 11.94901 11.97649 12.00286 12.02812 12.05228
## [25] 12.07533 12.09729 12.11816 12.13795 12.15667 12.17352 12.18782 12.19973
## [33] 12.20941 12.21704 12.22275 12.22673 12.22913 12.23010 12.22982 12.22844
## [41] 12.22613 12.22305 12.21935 12.21520 12.21076 12.20620 12.20167 12.19733
## [49] 12.19335 12.18989 12.18839 12.18989 12.19395 12.20015 12.20806 12.21724
## [57] 12.22726 12.23768 12.24809 12.25803 12.26709 12.27483 12.28081 12.28461
## [65] 12.28579 12.28392 12.27857 12.26931 12.25570 12.23731 12.21372 12.18391
## [73] 12.14764 12.10555 12.05830 12.00656 11.95098 11.89222 11.83095 11.76781
## [81] 11.70347 11.63859 11.57382 11.50983 11.44727 11.38680 11.32909 11.27478
## [89] 11.22455 11.17904 11.13892 11.10485 11.07402 11.04340 11.01330 10.98405
## [97] 10.95596 10.92933 10.90450 10.88176 10.86144 10.84385 10.82931 10.81813
## [105] 10.81062 10.80711 10.80789 10.81330 10.82365 10.83924 10.86040 10.88744
## [113] 10.92068 10.96140 11.00973 11.06424 11.12349 11.18606 11.25050 11.31540
## [121] 11.37931 11.44081 11.49846 11.55083 11.59649 11.63400 11.66194 11.67887
## [129] 11.68919 11.69802 11.70507 11.71002 11.71257 11.71238 11.70917 11.70261
## [137] 11.69239 11.67821 11.65975 11.63669 11.60917 11.57759 11.54211 11.50286
## [145] 11.45997 11.41360 11.36388 11.31095 11.25496
#n2
extract_n2c
## `geom_smooth()` using formula 'y ~ x'
fit_n2c
## [1] 11.53970 11.56045 11.58057 11.60024 11.61967 11.63902 11.65850 11.67830
## [9] 11.69836 11.71851 11.73869 11.75888 11.77903 11.79912 11.81910 11.83894
## [17] 11.85859 11.87803 11.89722 11.91611 11.93468 11.95288 11.97068 11.98804
## [25] 12.00493 12.02130 12.03713 12.05237 12.06698 12.08102 12.09455 12.10758
## [33] 12.12012 12.13219 12.14380 12.15495 12.16565 12.17593 12.18578 12.19522
## [41] 12.20427 12.21292 12.22120 12.22911 12.23666 12.24387 12.25074 12.25729
## [49] 12.26353 12.26946 12.27781 12.29087 12.30807 12.32880 12.35247 12.37849
## [57] 12.40627 12.43520 12.46471 12.49419 12.52305 12.55069 12.57653 12.59998
## [65] 12.62043 12.63729 12.64998 12.65789 12.66044 12.65703 12.64706 12.62845
## [73] 12.60009 12.56290 12.51779 12.46566 12.40744 12.34402 12.27632 12.20525
## [81] 12.13171 12.05663 11.98090 11.90544 11.83116 11.75896 11.68977 11.62448
## [89] 11.56401 11.50927 11.46117 11.42062 11.38597 11.35481 11.32690 11.30202
## [97] 11.27993 11.26041 11.24322 11.22814 11.21493 11.20336 11.19320 11.18422
## [105] 11.17619 11.16887 11.16205 11.15548 11.14894 11.14219 11.13500 11.12715
## [113] 11.11840 11.10604 11.08841 11.06686 11.04273 11.01737 10.99213 10.96837
## [121] 10.94742 10.93064 10.91938 10.91498 10.91879 10.93216 10.95644 10.99297
## [129] 11.03770 11.08581 11.13752 11.19307 11.25267 11.31655 11.38494 11.45806
## [137] 11.53615 11.61941 11.70809 11.80240 11.90228 12.00742 12.11774 12.23314
## [145] 12.35351 12.47876 12.60878 12.74349 12.88277
#assign fits to a vector
n1_trendc <- fit_n1c
n2_trendc <- fit_n2c
#extract y min and max for each
limits_n1c <- ggplot_build(extract_n1c)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n1c <- as.data.frame(limits_n1c)
n1_yminc <- limits_n1c$ymin
n1_ymaxc <- limits_n1c$ymax
limits_n2c <- ggplot_build(extract_n2c)$data
## `geom_smooth()` using formula 'y ~ x'
limits_n2c <- as.data.frame(limits_n2c)
n2_yminc <- limits_n2c$ymin
n2_ymaxc <- limits_n2c$ymax
#reassign dataframes (just to be safe)
work_n1c <- wrfc_smooth_n1
work_n2c <- wrfc_smooth_n1
#fill in missing dates to smooth fits
work_n1c <- work_n1c %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n1c <- work_n1c$date
work_n2c <- work_n2c %>% complete(date = seq(min(date), max(date), by = "1 day"))
date_vec_n2c <- work_n2c$date
#create a new smooth dataframe to layer
smooth_frame_n1c <- data.frame(date_vec_n1c, n1_trendc, n1_yminc, n1_ymaxc)
smooth_frame_n2c <- data.frame(date_vec_n2c, n2_trendc, n2_yminc, n2_ymaxc)
#WRF C
#plot smooth frames
p_wrf_c <- plotly::plot_ly() %>%
plotly::add_lines(x = ~date_vec_n1c, y = ~n1_trendc,
data = smooth_frame_n1c,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1c,
'</br> Median Log Copies: ', round(n1_trendc, digits = 2),
'</br> Target: N1'),
line = list(color = '#1B9E77', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
layout(xaxis = list(range = c(mindate - 7, maxdate + 7))) %>% #buffer here
plotly::add_lines(x = ~date_vec_n2c, y = ~n2_trendc,
data = smooth_frame_n2c,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2c,
'</br> Median Log Copies: ', round(n2_trendc, digits = 2),
'</br> Target: N2'),
line = list(color = '#D95F02', size = 8, opacity = 0.65),
showlegend = FALSE) %>%
plotly::add_ribbons(x ~date_vec_n1c, ymin = ~n1_yminc, ymax = ~n1_ymaxc,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n1c, #leaving in case we want to change
'</br> Max Log Copies: ', round(n1_ymaxc, digits = 2),
'</br> Min Log Copies: ', round(n1_yminc, digits = 2),
'</br> Target: N1'),
name = "",
line = list(color = '#1B9E77')) %>%
plotly::add_ribbons(x ~date_vec_n2c, ymin = ~n2_yminc, ymax = ~n2_ymaxc,
showlegend = FALSE,
opacity = 0.25,
hoverinfo = "text",
text = ~paste('</br> Date: ', date_vec_n2c, #leaving in case we want to change
'</br> Max Log Copies: ', round(n2_ymaxc, digits = 2),
'</br> Min Log Copies: ', round(n2_yminc, digits = 2),
'</br> Target: N2'),
name = "",
line = list(color = '#D95F02')) %>%
layout(yaxis = list(title = "Total Log SARS CoV-2 Copies",
showline = TRUE,
automargin = TRUE)) %>%
layout(xaxis = list(title = "Date")) %>%
layout(title = "WRF C") %>%
plotly::add_segments(x = as.Date("2020-06-24"),
xend = as.Date("2020-06-24"),
y = ~min(n1_yminc), yend = ~max(n1_ymaxc),
opacity = 0.35,
name = "Bars Repoen",
hoverinfo = "text",
text = "</br> Bars Reopen",
"</br> 2020-06-24",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-07-09"),
xend = as.Date("2020-07-09"),
y = ~min(n1_yminc), yend = ~max(n1_ymaxc),
opacity = 0.35,
name = "Mask Mandate",
hoverinfo = "text",
text = "</br> Mask Mandate",
"</br> 2020-07-09",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-08-20"),
xend = as.Date("2020-08-20"),
y = ~min(n1_yminc), yend = ~max(n1_ymaxc),
opacity = 0.35,
name = "</br> Classes Begin",
"</br> 2020-08-20",
hoverinfo = "text",
text = "Classes Begin",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_segments(x = as.Date("2020-10-03"),
xend = as.Date("2020-10-03"),
y = ~min(n1_yminc), yend = ~max(n1_ymaxc),
opacity = 0.35,
name = "</br> First Home Football Game",
"</br> 2020-10-03",
hoverinfo = "text",
text = "First Home Football Game",
showlegend = FALSE,
line = list(color = "black", dash = "dash")) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfc_smooth_n1,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#1B9E77', size = 6, opacity = 0.65)) %>%
plotly::add_markers(x = ~date, y = ~log_sum_copies_L,
data = wrfc_smooth_n2,
hoverinfo = "text",
showlegend = FALSE,
text = ~paste('</br> Date: ', date,
'</br> Actual Log Copies: ', round(log_sum_copies_L, digits = 2)),
marker = list(color = '#D95F02', size = 6, opacity = 0.65))
p_wrf_c
save(p_wrf_c, file = "./plotly_objs/p_wrf_c.rda")
save(smooth_frame_n1a, file = "./plotly_objs/smooth_frame_n1a.rda")
save(smooth_frame_n2a, file = "./plotly_objs/smooth_frame_n2a.rda")
save(smooth_frame_n1b, file = "./plotly_objs/smooth_frame_n1b.rda")
save(smooth_frame_n2b, file = "./plotly_objs/smooth_frame_n2b.rda")
save(smooth_frame_n1c, file = "./plotly_objs/smooth_frame_n1c.rda")
save(smooth_frame_n2c, file = "./plotly_objs/smooth_frame_n2c.rda")
save(date_vec_n1a, file = "./plotly_objs/date_vec_n1a.rda")
save(date_vec_n2a, file = "./plotly_objs/date_vec_n2a.rda")
save(date_vec_n1b, file = "./plotly_objs/date_vec_n1b.rda")
save(date_vec_n2b, file = "./plotly_objs/date_vec_n2b.rda")
save(date_vec_n1c, file = "./plotly_objs/date_vec_n1c.rda")
save(date_vec_n2c, file = "./plotly_objs/date_vec_n2c.rda")
save(n1_ymina, file = "./plotly_objs/n1_ymina.rda")
save(n1_ymaxa, file = "./plotly_objs/n1_ymaxa.rda")
save(n2_ymina, file = "./plotly_objs/n2_ymina.rda")
save(n2_ymaxa, file = "./plotly_objs/n2_ymaxa.rda")
save(n1_yminb, file = "./plotly_objs/n1_yminb.rda")
save(n1_ymaxb, file = "./plotly_objs/n1_ymaxb.rda")
save(n2_yminb, file = "./plotly_objs/n2_yminb.rda")
save(n2_ymaxb, file = "./plotly_objs/n2_ymaxb.rda")
save(n1_yminc, file = "./plotly_objs/n1_yminc.rda")
save(n1_ymaxc, file = "./plotly_objs/n1_ymaxc.rda")
save(n2_yminc, file = "./plotly_objs/n2_yminc.rda")
save(n2_ymaxc, file = "./plotly_objs/n2_ymaxc.rda")